package com.gxc.string;

import java.math.BigInteger;
import java.util.Scanner;

/**
 * * 字符串重排
 * *
 * * 题目描述
 * * 给定一个只包含大写英文字母的字符串S，要求你给出对S重新排列的所有不相同的排列数。
 * * 如：S为ABA，则不同的排列有ABA、AAB、BAA三种。
 * *
 * * 解答要求
 * * 输入
 * * 输入一个长度不超过10的字符串S，我们确保都是大写的。
 * *
 * * 输出
 * * 输出S重新排列的所有不相同的排列数（包含自己本身）。
 * *
 * * 样例
 * * 输入样例 1
 * * ABA
 * * 输出样例 1
 * * 3
 */
public class StringPermutationCount {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine().trim();
        scanner.close();

        System.out.println(calculatePermutationCount(s));
    }

    private static BigInteger calculatePermutationCount(String s) {
        int[] charCount = new int[26];
        for (char c : s.toCharArray()) {
            charCount[c - 'A']++;
        }

        BigInteger totalPermutations = factorial(s.length());
        for (int count : charCount) {
            if (count > 1) {
                totalPermutations = totalPermutations.divide(factorial(count));
            }
        }

        return totalPermutations;
    }

    private static BigInteger factorial(int n) {
        BigInteger result = BigInteger.ONE;
        for (int i = 2; i <= n; i++) {
            result = result.multiply(BigInteger.valueOf(i));
        }
        return result;
    }
}
